Hello, 各位 iT 邦幫忙 的粉絲們大家好~~~
在本系列文會展開使用 Avalonia UI 技術所建立的 TopAOAIConnector App 。由於使用 Avalonia UI 可以很快速的進行各平台的 桌面 應用程式開發,並且透過此 TopAOAIConnector App 來串接 Azure OpenAI Service 時所需的功能研究。
本篇是 就是要來點 A.I. 的 TopAOAIConnector App 系列文的 EP11。
在 前一回 時已經完成的 Setting 的最基本 UI 部分,接下來就把功能面的處理給完成吧!
找到 ViewModels/SettingPageViewModel.cs 。
首先,調整一下原本 settingsPath 欄位的設計(點 1):
原本的:
private readonly string settingsPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "TopAOAIConnector", "settings.json");
取代為:
private const string directoryName = "TopAOAIConnector";
private const string settingsFileName = "settings.json";
private readonly string settingsFilePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), directoryName, settingsFileName);
接著來設計 SettingPageViewModel 的建構方法(點 2):
public SettingPageViewModel()
{
if (File.Exists(settingsFilePath))
{
var jsonSettings = File.ReadAllText(settingsFilePath);
var aoaiSettings = JsonSerializer.Deserialize<AOAISettings>(jsonSettings);
Settings = aoaiSettings;
}
else
{
Settings = new();
}
}
改完後大概會如下圖 (紅框為所加入的 C# 程式碼):
繼續調整一下在前一回所設計的 "Clear" 方法。
原本的:
System.Diagnostics.Debug.WriteLine($"Clear...");
在其後加入程式碼:
if (File.Exists(settingsFilePath))
{
File.Delete(settingsFilePath);
}
var directoryPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), directoryName);
if (Directory.Exists(directoryPath))
{
Directory.Delete(directoryPath);
}
Settings = new();
完成後如下圖紅框所示:
繼續調整一下在前一回所設計的 "Save" 方法。
把原本的:
System.Diagnostics.Debug.WriteLine($"Save to...{settingsFilePath}");
在其後加入程式碼:
var directoryPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), directoryName);
if (!Directory.Exists(directoryPath))
{
Directory.CreateDirectory(directoryPath);
}
var jsonSettings = JsonSerializer.Serialize(Settings);
await File.WriteAllTextAsync(settingsFilePath, jsonSettings);
完成後如下圖紅框所示:
"執行並偵錯(F5)" 後,切到 "Setting" 後,在四個文字輸入框中輸入文字後點選 "儲存":
在點選儲存前後用主要透過命令提示字元的下列指令觀察變化:
dir /OD
(上述指令的概念為: 根據時間由舊到新,列出當前路徑資料夾底下的資料夾與檔案。)
下圖為透過命令提示字元的相關指令對變化觀察:
透過點選 "清除" 除了把畫面當中的文字給清除外,也順便會把所記錄的資訊檔案給刪除:
除非剛好有應用程式正開啟 TopAOAIConnector 這個資料夾,那目前 "Clear" 的程式則會直接拋出例外(Expection),但為了力求介紹簡潔,在本系列文就盡量不節外生枝介紹相關處理。
但 例外處理 是門重要的大學問,有興趣的看倌可以參考 Skilltree 的 例外處理實戰 課程,上完課程後將會有截然不同的感受。
看倌們也可以玩玩看,若已經有儲存資料,下次再執行此 TopAOAIConnector App 並切換到 Setting 時,資料是否能讀取回來唷!
那就下回見~~~